<?php

function json_encode($x)
{
	if (is_array($x)) {
		$is_array = true;
		foreach ($x as $k => &$v) if (!($is_array &= is_int($k))) break;
		unset($k, $v); // without it next foreach'es produces wrong result
	} else {
		$is_array = false;
	}

	if ($is_array) {                                         // [ x0 , x1, x2 ]
		$data = array();
		foreach ($x as $k => $v) $data[] = json_encode($v);
		$res = '['.implode(",\n", $data).']';
	} elseif (is_object($x) || is_array($x)) {               // { k0:v0, k1:v1, k2:v2 }
		$data = array();
		foreach ((array)$x as $k => $v) $data[] = json_encode($k) . ':' . json_encode($v);
		$res = '{'.implode(',', $data).'}';
	} elseif (is_numeric($x)) {                              // 123
		$res = $x;
	} elseif (is_bool($x)) {                                 // true || false
		$res = $x ? 'true' : 'false';
	} elseif (is_null($x)) {                                 // null
		$res = 'null';
	} else {                                                 // "string"
		//$res = '"'.str_replace('"', '\\"', mb_convert_encoding($x, 'UCS-2LE', 'UTF-8')).'"';
		$res = '"'.str_replace('"', '\\"', $x).'"';
	}
	return $res;
}

